const Setting = require("./src/setting.env");
const localData = require("./localData.js");

// 拼接路径
const resolve = (dir) => require("path").join(__dirname, dir);

// 增加环境变量
// process.env.VUE_APP_VERSION = require('./package.json').version;
// process.env.VUE_APP_BUILD_TIME = require('dayjs')().format('YYYY-M-D HH:mm:ss');

module.exports = {
  publicPath: Setting.publicPath,
  lintOnSave: Setting.lintOnSave,
  outputDir: Setting.outputDir,
  assetsDir: Setting.assetsDir,
  runtimeCompiler: true,
  productionSourceMap: false,
  devServer: {
    host: "0.0.0.0",
    port: 8080,
    publicPath: Setting.publicPath,
    proxy: {
      "/api": {
        target: localData.API_URl,
        changeOrigin: true,
        pathRewrite: {
          "/api": "",
        },
      },
      "/qd-s-consumerapp/": {
        target: localData.API_URl,
        changeOrigin: true,
        pathRewrite: {
          "/qd-s-consumerapp/": "/qd-s-consumerapp/",
        },
      },
      "/guns": {
        target: localData.API_URl,
        changeOrigin: true,
        pathRewrite: {
          "/guns": "/guns",
        },
      },
      "/qd-s-system": {
        target: localData.API_URl,
        changeOrigin: true,
        pathRewrite: {
          "/qd-s-system": "/qd-s-system",
        },
      },
      "/sale-app": {
        target: localData.API_URl,
        changeOrigin: true,
        pathRewrite: {
          "/sale-app": "",
        },
      },
      "/shop-back-app": {
        target: localData.API_URl,
        changeOrigin: true,
        pathRewrite: {
          "/shop-back-app": "/shop-back-app",
        },
      },
      "/qd-s-common": {
        target: localData.API_URl,
        changeOrigin: true,
        pathRewrite: {
          "/qd-s-common": "/qd-s-common",
        },
      },
      "/qd-s-document": {
        target: localData.API_URl,
        changeOrigin: true,
        pathRewrite: {
          "/qd-s-document": "/qd-s-document",
        },
      },
      "/qd-s-sale": {
        target: localData.API_URl,
        changeOrigin: true,
        pathRewrite: {
          "/qd-s-sale": "/qd-s-sale",
        },
      },
      "/ytcheckserver": {
        target: "http://58.58.161.114:59191",
        changeOrigin: true,
        pathRewrite: {
          "/ytcheckserver": "/ytcheckserver",
        },
      },
    },
  },
  css: {
    loaderOptions: {
      less: {},
    },
  },
  // 默认设置: https://github.com/vuejs/vue-cli/tree/dev/packages/@vue/cli-service/lib/config/base.js
  chainWebpack: (config) => {
    /**
     * 删除懒加载模块的 prefetch preload，降低带宽压力
     * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#prefetch
     * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#preload
     * 而且预渲染时生成的 prefetch 标签是 modern 版本的，低版本浏览器是不需要的
     */
    config.plugins.delete("prefetch").delete("preload");
    // 解决 cli3 热更新失效 https://github.com/vuejs/vue-cli/issues/1559
    config.resolve.symlinks(true);
    config
      // 开发环境
      .when(
        process.env.NODE_ENV === "development",
        // sourcemap不包含列信息
        (config) => config.devtool("cheap-source-map")
      )
      // 非开发环境
      .when(process.env.NODE_ENV !== "development", (config) => {});
    // 不编译 iView Pro
    config.module
      .rule("js")
      .test(/\.jsx?$/)
      .exclude.add(resolve("src/libs/iview-pro"))
      .end();
    // 使用 iView Loader
    // config.module
    //     .rule('vue')
    //     .test(/\.vue$/)
    //     .use('iview-loader')
    //     .loader('iview-loader')
    //     .tap(() => {
    //         return Setting.iviewLoaderOptions
    //     })
    //     .end();
    // markdown
    config.module
      .rule("md")
      .test(/\.md$/)
      .use("text-loader")
      .loader("text-loader")
      .end();
    // i18n
    config.module
      .rule("i18n")
      .resourceQuery(/blockType=i18n/)
      .use("i18n")
      .loader("@kazupon/vue-i18n-loader")
      .end();
    // image exclude
    const imagesRule = config.module.rule("images");
    imagesRule
      .test(/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/)
      .exclude.add(resolve("src/assets/svg"))
      .end();
    // 重新设置 alias
    config.resolve.alias.set("@api", resolve("src/api"));
    // node
    config.node.set("__dirname", true).set("__filename", true);
    // 判断是否需要加入模拟数据
    const entry = config.entry("app");
    if (Setting.isMock) {
      entry.add("@/mock").end();
    }
  },
};
